home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / misc / pdflib / p_color.c < prev    next >
C/C++ Source or Header  |  1999-01-01  |  3KB  |  118 lines

  1. /* p_color.c
  2.  * Copyright (C) 1997-98 Thomas Merz. All rights reserved.
  3.  *
  4.  * PDFlib color routines
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <math.h>
  9.  
  10. #include "p_intern.h"
  11.  
  12. /* Section 8.5 Color operators */
  13.  
  14. /* avoid wrong error messages due to rounding artifacts
  15.  * This doesn't do any harm since we truncate to 5 decimal places anyway
  16.  * when producing PDF output
  17.  */
  18. #define EPS    1.00001
  19.  
  20. void
  21. PDF_setgray_fill(PDF *p, float g)
  22. {
  23.     if (g < 0.0 || g > EPS ) {
  24.     pdf_error(p, PDF_WARN, 
  25.         "Bogus gray value (%f) in PDF_setgray_fill - ignored!", g);
  26.     return;
  27.     }
  28.  
  29.     pdf_end_text(p);
  30.     (void) fprintf(p->fp,"%s g\n", pdf_float(g));
  31. }
  32.  
  33. void
  34. PDF_setgray_stroke(PDF *p, float g)
  35. {
  36.     if (g < 0.0 || g > EPS ) {
  37.     pdf_error(p, PDF_WARN, 
  38.         "Bogus gray value (%f) in PDF_setgray_stroke - ignored!", g);
  39.     return;
  40.     }
  41.  
  42.     pdf_end_text(p);
  43.     (void) fprintf(p->fp,"%s G\n", pdf_float(g));
  44. }
  45.  
  46. void
  47. PDF_setgray(PDF *p, float g)
  48. {
  49.     if (g < 0.0 || g > EPS ) {
  50.     pdf_error(p, PDF_WARN, 
  51.         "Bogus gray value (%f) in PDF_setgray - ignored!", g);
  52.     return;
  53.     }
  54.  
  55.     pdf_end_text(p);
  56.     PDF_setgray_stroke(p, g);
  57.     PDF_setgray_fill(p, g);
  58. }
  59.  
  60. void
  61. PDF_setrgbcolor_fill(PDF *p, float red, float green, float blue)
  62. {
  63.     if (red < 0.0 || red > EPS || green < 0.0 || green > EPS ||
  64.     blue < 0.0 || blue > EPS) {
  65.     pdf_error(p, PDF_WARN, 
  66.         "Bogus color value (%f/%f/%f) in PDF_setrgbcolor_fill - ignored!",
  67.         red, green, blue);
  68.     return;
  69.     }
  70.  
  71.     if (red == green && green == blue)
  72.     PDF_setgray_fill(p, red);
  73.     else {
  74.     pdf_end_text(p);
  75.     (void) fprintf(p->fp, "%s %s %s rg\n",
  76.         pdf_float(red), pdf_float(green), pdf_float(blue));
  77.     }
  78. }
  79.  
  80. void
  81. PDF_setrgbcolor_stroke(PDF *p, float red, float green, float blue)
  82. {
  83.     if (red < 0.0 || red > EPS || green < 0.0 || green > EPS ||
  84.     blue < 0.0 || blue > EPS) {
  85.     pdf_error(p, PDF_WARN, 
  86.         "Bogus color value (%f/%f/%f) in PDF_setrgbcolor_stroke - ignored!",
  87.         red, green, blue);
  88.     return;
  89.     }
  90.  
  91.     if (red == green && green == blue)
  92.     PDF_setgray_stroke(p, red);
  93.     else {
  94.     (void) fprintf(p->fp, "%s %s %s RG\n",
  95.         pdf_float(red), pdf_float(green), pdf_float(blue));
  96.     pdf_end_text(p);
  97.     }
  98. }
  99.  
  100. void
  101. PDF_setrgbcolor(PDF *p, float red, float green, float blue)
  102. {
  103.     if (red < 0.0 || red > EPS || green < 0.0 || green > EPS ||
  104.     blue < 0.0 || blue > EPS) {
  105.     pdf_error(p, PDF_WARN, 
  106.         "Bogus color value (%f/%f/%f) in PDF_setrgbcolor - ignored!",
  107.         red, green, blue);
  108.     return;
  109.     }
  110.  
  111.     if (red == green && green == blue)
  112.     PDF_setgray(p, red);
  113.     else {
  114.     PDF_setrgbcolor_fill(p, red, green, blue);
  115.     PDF_setrgbcolor_stroke(p, red, green, blue);
  116.     }
  117. }
  118.